home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / PROGRAMR / OLE2BOOK.ZIP / CHAP06.ZIP / CHAP06 / POLYLINE / POLYLINE.H < prev    next >
C/C++ Source or Header  |  1993-04-14  |  10KB  |  306 lines

  1. /*
  2.  * POLYLINE.H
  3.  * Polyline Component Object Chapter 6
  4.  *
  5.  * Definitions and function prototypes for the PolyLine DLL object.
  6.  *
  7.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Software Design Engineer
  10.  * Microsoft Systems Developer Relations
  11.  *
  12.  * Internet  :  kraigb@microsoft.com
  13.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  14.  */
  15.  
  16.  
  17. #ifndef _POLYLINE_H_
  18. #define _POLYLINE_H_
  19.  
  20. #include <windows.h>
  21. #include <ole2.h>
  22. #include <classlib.h>
  23. #include <bookguid.h>
  24. #include <ipoly6.h>
  25. #include "resource.h"
  26.  
  27.  
  28. //Classname
  29. #define SZCLASSPOLYLINE             "polyline"
  30.  
  31. #define HIMETRIC_PER_INCH           2540
  32.  
  33. //Window extra bytes and offsets
  34. #define CBPOLYLINEWNDEXTRA          (sizeof(LONG))
  35. #define PLWL_STRUCTURE              0
  36.  
  37.  
  38. //DLLPOLY.CPP
  39.  
  40. //This class factory object creates Polyline objects.
  41.  
  42. class __far CPolylineClassFactory : public IClassFactory
  43.     {
  44.     protected:
  45.         ULONG           m_cRef;         //Reference count on object
  46.  
  47.     public:
  48.         CPolylineClassFactory(void);
  49.         ~CPolylineClassFactory(void);
  50.  
  51.         //IUnknown members
  52.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  53.         STDMETHODIMP_(ULONG) AddRef(void);
  54.         STDMETHODIMP_(ULONG) Release(void);
  55.  
  56.         //IClassFactory members
  57.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
  58.         STDMETHODIMP         LockServer(BOOL);
  59.     };
  60.  
  61. typedef CPolylineClassFactory FAR * LPCPolylineClassFactory;
  62.  
  63.  
  64.  
  65. //POLYWIN.CPP
  66. LRESULT __export FAR PASCAL PolylineWndProc(HWND, UINT, WPARAM, LPARAM);
  67.  
  68.  
  69. //Type for an object-destroyed callback
  70. typedef void (FAR PASCAL *LPFNDESTROYED)(void);
  71.  
  72.  
  73. #define CFORMATETCGET       3
  74. #define CFORMATETCSET       1
  75.  
  76.  
  77. //POLYLINE.CPP
  78. class __far CPolyline : public IUnknown
  79.     {
  80.     friend LRESULT __export FAR PASCAL PolylineWndProc(HWND, UINT, WPARAM, LPARAM);
  81.  
  82.     //Make any contained interfaces your friends so they can get at privates
  83.     friend class CImpIPolyline;
  84.     friend class CImpIPersistStorage;
  85.     friend class CImpIDataObject;
  86.  
  87.     protected:
  88.         HWND            m_hWnd;
  89.         HINSTANCE       m_hInst;
  90.  
  91.         ULONG           m_cRef;         //Object reference count.
  92.         LPUNKNOWN       m_punkOuter;    //Controlling Unknown for aggregation
  93.         LPFNDESTROYED   m_pfnDestroy;   //Function to call on closure.
  94.         BOOL            m_fDirty;       //Have we changed?
  95.         POLYLINEDATA    m_pl;           //Our actual data.
  96.  
  97.         LPCStringTable  m_pST;          //Object strings
  98.         UINT            m_cf;           //Object clipboard format.
  99.         CLSID           m_clsID;        //Current CLSID
  100.         IID             m_iID;          //Custom interface IID.
  101.  
  102.         //Contained interfaces
  103.         LPPOLYLINE          m_pIPolyline;
  104.         LPPERSISTSTORAGE    m_pIPersistStorage;
  105.  
  106.         //CHAPTER6MOD
  107.         LPDATAOBJECT        m_pIDataObject;
  108.         LPDATAADVISEHOLDER  m_pIDataAdviseHolder;
  109.  
  110.         //Arrays for IDataObject::EnumFormatEtc
  111.         ULONG               m_cfeGet;
  112.         FORMATETC           m_rgfeGet[CFORMATETCGET];
  113.  
  114.         ULONG               m_cfeSet;
  115.         FORMATETC           m_rgfeSet[CFORMATETCSET];
  116.  
  117.         //End CHAPTER6MOD
  118.  
  119.         LPPOLYLINEADVISESINK    m_pAdv;
  120.  
  121.     protected:
  122.         void      PointScale(LPRECT, LPPOINT, BOOL);
  123.         void      Draw(HDC, BOOL, BOOL);
  124.         void      RectConvertMappings(LPRECT, BOOL);
  125.  
  126.         //CHAPTER6MOD
  127.         /*
  128.          * These members pulled from IPolyline now serve as a central
  129.          * store for this functionality to be used from other interfaces
  130.          * like IPersistStorage and IDataObject.  Other interfaces later
  131.          * may also use them.
  132.          */
  133.         STDMETHODIMP DataSet(LPPOLYLINEDATA, BOOL, BOOL);
  134.         STDMETHODIMP DataGet(LPPOLYLINEDATA);
  135.         STDMETHODIMP DataSetMem(HGLOBAL, BOOL, BOOL, BOOL);
  136.  
  137.         STDMETHODIMP RenderNative(HGLOBAL FAR *);
  138.         STDMETHODIMP RenderBitmap(HBITMAP FAR *);
  139.         STDMETHODIMP RenderMetafilePict(HGLOBAL FAR *);
  140.         //End CHAPTER6MOD
  141.  
  142.     public:
  143.         CPolyline(LPUNKNOWN, LPFNDESTROYED, HINSTANCE);
  144.         ~CPolyline(void);
  145.  
  146.         BOOL      FInit(void);
  147.  
  148.         //Non-delegating object IUnknown
  149.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  150.         STDMETHODIMP_(ULONG) AddRef(void);
  151.         STDMETHODIMP_(ULONG) Release(void);
  152.     };
  153.  
  154. typedef CPolyline FAR * LPCPolyline;
  155.  
  156.  
  157. //Interface implementation contained in the Polyline.
  158.  
  159. //IPOLYLIN.CPP
  160. class __far CImpIPolyline : public IPolyline6
  161.     {
  162.     protected:
  163.         ULONG               m_cRef;      //Interface reference count.
  164.         LPVOID              m_pObj;      //Back pointer to the object.
  165.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  166.  
  167.     public:
  168.         CImpIPolyline(LPVOID, LPUNKNOWN);
  169.         ~CImpIPolyline(void);
  170.  
  171.         //IUnknown members.
  172.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  173.         STDMETHODIMP_(ULONG) AddRef(void);
  174.         STDMETHODIMP_(ULONG) Release(void);
  175.  
  176.         //CHAPTER6MOD
  177.         //::Data* and ::Render* replaced with IDataObject
  178.         //End CHAPTER6MOD
  179.  
  180.         //Manipulation members:
  181.         STDMETHODIMP Init(HWND, LPRECT, DWORD, UINT);
  182.         STDMETHODIMP New(void);
  183.         STDMETHODIMP Undo(void);
  184.         STDMETHODIMP Window(HWND FAR *);
  185.  
  186.         STDMETHODIMP SetAdvise(LPPOLYLINEADVISESINK);
  187.         STDMETHODIMP GetAdvise(LPPOLYLINEADVISESINK FAR *);
  188.  
  189.         STDMETHODIMP RectGet(LPRECT);
  190.         STDMETHODIMP SizeGet(LPRECT);
  191.         STDMETHODIMP RectSet(LPRECT, BOOL);
  192.         STDMETHODIMP SizeSet(LPRECT, BOOL);
  193.  
  194.         STDMETHODIMP ColorSet(UINT, COLORREF, COLORREF FAR *);
  195.         STDMETHODIMP ColorGet(UINT, COLORREF FAR *);
  196.  
  197.         STDMETHODIMP LineStyleSet(UINT, UINT FAR *);
  198.         STDMETHODIMP LineStyleGet(UINT FAR *);
  199.     };
  200.  
  201. typedef CImpIPolyline * LPCImpIPolyline;
  202.  
  203.  
  204. //IPersistStorage Interface implementation contained in the Polyline.
  205.  
  206. //IPERSTOR.CPP
  207. class __far CImpIPersistStorage : public IPersistStorage
  208.     {
  209.     protected:
  210.         ULONG               m_cRef;      //Interface reference count.
  211.         LPVOID              m_pObj;      //Back pointer to the object.
  212.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  213.  
  214.     public:
  215.         CImpIPersistStorage(LPVOID, LPUNKNOWN);
  216.         ~CImpIPersistStorage(void);
  217.  
  218.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  219.         STDMETHODIMP_(ULONG) AddRef(void);
  220.         STDMETHODIMP_(ULONG) Release(void);
  221.  
  222.         STDMETHODIMP GetClassID(LPCLSID);
  223.  
  224.         STDMETHODIMP IsDirty(void);
  225.         STDMETHODIMP InitNew(LPSTORAGE);
  226.         STDMETHODIMP Load(LPSTORAGE);
  227.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  228.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  229.         STDMETHODIMP HandsOffStorage(void);
  230.     };
  231.  
  232.  
  233.  
  234. //IDataObject Interface implementation contained in the Polyline.
  235. //IDATAOBJ.CPP
  236. class __far CImpIDataObject : public IDataObject
  237.     {
  238.     private:
  239.         ULONG           m_cRef;         //Interface reference count.
  240.         LPVOID          m_pObj;         //Back pointer to the object.
  241.         LPUNKNOWN       m_punkOuter;    //Controlling unknown for delegation
  242.  
  243.     public:
  244.         CImpIDataObject(LPVOID, LPUNKNOWN);
  245.         ~CImpIDataObject(void);
  246.  
  247.         //IUnknown members that delegate to m_punkOuter.
  248.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  249.         STDMETHODIMP_(ULONG) AddRef(void);
  250.         STDMETHODIMP_(ULONG) Release(void);
  251.  
  252.         //IDataObject members
  253.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  254.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  255.         STDMETHODIMP QueryGetData(LPFORMATETC);
  256.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC, LPFORMATETC);
  257.         STDMETHODIMP SetData(LPFORMATETC, STGMEDIUM FAR *, BOOL);
  258.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC FAR *);
  259.         STDMETHODIMP DAdvise(FORMATETC FAR *, DWORD,  LPA